+2005-10-04 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c (switch_to_shortcut): Take a
+ shortcut position, not a ShortcutsIndex, to make the function more
+ generic.
+ (home_folder_handler): Pass the resolved index to
+ switch_to_shortcut(), rather than just SHORTCUTS_HOME.
+ (desktop_folder_handler): Likewise for SHORTCUTS_DESKTOP.
+ (gtk_file_chooser_default_class_init): Add a "quick-bookmark"
+ binding signal, and bind it to Alt-1, Alt-2. ..., Alt-0. These
+ make the respective key switch to the first, second, ..., tenth
+ bookmark.
+ (quick_bookmark_handler): Implement.
+
2005-10-04 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkpathbar.c (get_dir_name): Don't special-case Home and
+2005-10-04 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c (switch_to_shortcut): Take a
+ shortcut position, not a ShortcutsIndex, to make the function more
+ generic.
+ (home_folder_handler): Pass the resolved index to
+ switch_to_shortcut(), rather than just SHORTCUTS_HOME.
+ (desktop_folder_handler): Likewise for SHORTCUTS_DESKTOP.
+ (gtk_file_chooser_default_class_init): Add a "quick-bookmark"
+ binding signal, and bind it to Alt-1, Alt-2. ..., Alt-0. These
+ make the respective key switch to the first, second, ..., tenth
+ bookmark.
+ (quick_bookmark_handler): Implement.
+
2005-10-04 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkpathbar.c (get_dir_name): Don't special-case Home and
DOWN_FOLDER,
HOME_FOLDER,
DESKTOP_FOLDER,
+ QUICK_BOOKMARK,
LAST_SIGNAL
};
static void down_folder_handler (GtkFileChooserDefault *impl);
static void home_folder_handler (GtkFileChooserDefault *impl);
static void desktop_folder_handler (GtkFileChooserDefault *impl);
+static void quick_bookmark_handler (GtkFileChooserDefault *impl,
+ gint bookmark_index);
static void update_appearance (GtkFileChooserDefault *impl);
static void set_current_filter (GtkFileChooserDefault *impl,
static void
gtk_file_chooser_default_class_init (GtkFileChooserDefaultClass *class)
{
+ static const guint quick_bookmark_keyvals[10] = {
+ GDK_1, GDK_2, GDK_3, GDK_4, GDK_5, GDK_6, GDK_7, GDK_8, GDK_9, GDK_0
+ };
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
GtkBindingSet *binding_set;
+ int i;
parent_class = g_type_class_peek_parent (class);
NULL, NULL,
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[QUICK_BOOKMARK] =
+ _gtk_binding_signal_new (I_("quick-bookmark"),
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_CALLBACK (quick_bookmark_handler),
+ NULL, NULL,
+ _gtk_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
binding_set = gtk_binding_set_by_class (class);
"desktop-folder",
0);
+ for (i = 0; i < 10; i++)
+ gtk_binding_entry_add_signal (binding_set,
+ quick_bookmark_keyvals[i], GDK_MOD1_MASK,
+ "quick-bookmark",
+ 1, G_TYPE_INT, i);
+
_gtk_file_chooser_install_properties (gobject_class);
gtk_settings_install_property (g_param_spec_string ("gtk-file-chooser-backend",
_gtk_path_bar_down (GTK_PATH_BAR (impl->browse_path_bar));
}
-/* Switches to SHORTCUTS_HOME or SHORTCUTS_DESKTOP */
+/* Switches to the shortcut in the specified index */
static void
switch_to_shortcut (GtkFileChooserDefault *impl,
- ShortcutsIndex where)
+ int pos)
{
- int pos;
GtkTreeIter iter;
- g_assert (where == SHORTCUTS_HOME || where == SHORTCUTS_DESKTOP);
-
- pos = shortcuts_get_index (impl, where);
if (!gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (impl->shortcuts_model), &iter, NULL, pos))
g_assert_not_reached ();
home_folder_handler (GtkFileChooserDefault *impl)
{
if (impl->has_home)
- switch_to_shortcut (impl, SHORTCUTS_HOME);
+ switch_to_shortcut (impl, shortcuts_get_index (impl, SHORTCUTS_HOME));
}
/* Handler for the "desktop-folder" keybinding signal */
desktop_folder_handler (GtkFileChooserDefault *impl)
{
if (impl->has_desktop)
- switch_to_shortcut (impl, SHORTCUTS_DESKTOP);
+ switch_to_shortcut (impl, shortcuts_get_index (impl, SHORTCUTS_DESKTOP));
+}
+
+static void
+quick_bookmark_handler (GtkFileChooserDefault *impl,
+ gint bookmark_index)
+{
+ int bookmark_pos;
+ GtkTreePath *path;
+
+ if (bookmark_index < 0 || bookmark_index >= impl->num_bookmarks)
+ return;
+
+ bookmark_pos = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS) + bookmark_index;
+
+ path = gtk_tree_path_new_from_indices (bookmark_pos, -1);
+ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view),
+ path, NULL,
+ FALSE, 0.0, 0.0);
+ gtk_tree_path_free (path);
+
+ switch_to_shortcut (impl, bookmark_pos);
}
\f